package com.chapter01exercise.homework13;

import com.sun.org.apache.bcel.internal.generic.NEW;

/**
 * @Author 小闽
 * @Date 2024/8/17 16:33
 * @PackageName: com.chapter01exercise.homework13
 * @ClassName: Homework13
 * @Description: 练习13
 * @Version 1.0
 */
public class Homework13 {
    /**
     * 案列题目描述：
     * （1） 做一个Student类，Student类有名称(name)、性别(sex)、年龄(age)、学号(stu_id),
     *      做合理封装，通过构造器在创建对象时将4个属性赋值。
     * （2） 写一个Teacher类，Teacher类有名称(name)、性别(sex)、年龄(age)、工龄(work_age),
     *      做合理封装，通过构造器在创建对象时将4个属性赋值。
     * （3） 抽取一个父类Person类，将共同属性和方法放到Person类。
     * （4） 学生需要有学习的方法(study)，在方法里写上"我承诺，我会好好学习"。
     * （5） 教师需要有教学的方法(teacher)，在方法里写上"我承诺，我会认真教学"。
     * （6） 学生和教师都有玩的方法(play)，学生玩的是足球，老师玩的是象棋，此方法是返回字符串的，
     *      分别返回"xx爱玩足球"和 “xx爱玩象棋”(其中xx分别代表学生和老师的名字)。因为玩的方法名称都一样，
     *      所以要求方法定义在父类中，子类实现重写。
     * （7） 定义多态数组，里面保存2个学生和2个教师，要求按年龄从高到低排序。
     * （8） 定义方法，形参为Person类型，功能：调用学生的study或教师teach()方法。
     *
     * 打印效果如下：
     * 老师的信息：
     * 姓名： 张飞
     * 年龄： 30
     * 性别： 男
     * 工龄： 5
     * 我承诺，我会认真教课
     * 张飞爱玩象棋
     * ------------------------
     * 学生的信息：
     * 姓名： 小明
     * 年龄： 15
     * 性别： 男
     * 学号： 00023102
     * 我承诺，我会好好学习
     * 小明爱玩足球。
     */
    public static void main(String[] args) {
        Teacher teacher = new Teacher("张飞",'男',30,5);
        teacher.printInfo();
        Student student = new Student("小明",'男',15,2044010407);
        student.printInfo();
        /**
         * 定义Person[]数组
         */
        Person[] person = new Person[4];
        person[0] = new Teacher("张飞",'男',30,5);
        person[1] = new Teacher("刘备",'男',31,6);
        person[2] = new Student("小明",'男',32,7);
        person[3] = new Student("小红",'女',33,8);
        Homework13 homework13 = new Homework13();
        homework13.bubbleSort(person);
        /**
         * 遍历多态数组，调用不同的方法
         */
        for (int i = 0; i < person.length; i++) {
            homework13.test(person[i]);
        }

    }
    /**
     * 对象数组排序
     */
    public void bubbleSort(Person[] person){
        Person temp = null;
        for (int i = 0; i < person.length; i++) {
            for (int j = 0; j < person.length - 1 - i; j++) {
                if(person[j].getAge() < person[j+1].getAge()){
                    temp = person[j];
                    person[j] = person[j+1];
                    person[j+1] = temp;
                }
            }
        }
        for (int i = 0; i < person.length; i++) {
            System.out.println(person[i]);
        }
    }
    /**
     * 多态实现不同类型调用不同的方法行为，向下转型，即将父类的引用指向子类的对象
     */
    public void test(Person person){
        if (person instanceof Student){
            ((Student) person).study();
        }else if(person instanceof Teacher){
            ((Teacher) person).teacher();
        }else {
            System.out.println("传入的类型不匹配...");
        }
    }
}
